package main

import (
	"fmt"
	"github.com/spf13/viper"
)

type config struct {
	UserName    string
	Age         int
	*ConfigHost `mapstructure:"host"`
}
type ConfigHost struct {
	Address string
	Port    int
}

func main() {

	//读取配置文件
	viper.SetConfigFile("config.yaml")

	//配置去哪个路径下，找配置文件（可以添加多个）
	viper.AddConfigPath(".")        //当前项目路径
	viper.AddConfigPath("./config") //当前项目路径的config文件夹下
	viper.AddConfigPath("$HOME")    //参数中可包含环境变量

	//使用断言判断是否是配置文件不存在的错误
	if err := viper.ReadInConfig(); err != nil {
		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
			fmt.Printf("配置文件不存在")
			return
		} else {
			fmt.Printf("配置文件存在,但是存在其他错误：%v\n", err)
			return
		}
	}
	//设置默认值

	// 任何需要将此配置添加到程序中的方法。
	var c = new(config)
	if err := viper.Unmarshal(c); err != nil {
		fmt.Printf("序列化失败，err：%v\n", err)
	}

	//var h configHost
	//if err := viper.Unmarshal(&h); err != nil {
	//	fmt.Printf("序列化失败，err：%v\n", err)
	//}

	fmt.Printf("%#v\n", c.ConfigHost) //main.config{Name:"hdd", Age:22, host:main.configHost{address:"", port:0}}
}
